package com.ss.utlis;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class StringUtil {
    /**
     * 截取后缀
     * @param s
     * @return   ".txt"
     */
    public static String getPrefix(String s){
        int i = s.length()-1;
        boolean z = false;
        for(;i>-1;i--){
            if (s.charAt(i)=='.'){
                z = true;
                break;
            }
        }
        if (!z){
            System.out.println("没有后缀名");
            return "";
        }
        return s.substring(i);
    }

    /**
     * 根据字符切分字符串
     * @param s
     * @param c
     * @return
     */
    public static List<String> cutStringByChar(String s,char c){
        int z = 0;
        ArrayList<String> list = new ArrayList<>();
        if (s == null){
            return list;
        }
        for (int i = 0;i<s.length();i++){
            if (s.charAt(i) == c  ){
                list.add(s.substring(z,i));
                z = i+1;
            }
        }
        if(z!=0){
            list.add(s.substring(z));
        }
        if (z==0){
            list.add(s);
        }
        return list;
    }

    /**
     * 根据字符切分字符串
     * @param s
     * @param c
     * @return
     */
    public static String[] cutStringByCharGetArray(String s,char c){
        List<String> strings = cutStringByChar(s, c);
        String[] result = new String[strings.size()];
        for(int i = 0;i<strings.size();i++){
            result[i] = strings.get(i);
        }
        return result;
    }

    /**
     * 获取指定字符到源字符串结尾的字符串 33.txt  . -> txt
     * @param s
     * @param c
     * @return
     */
    public static String getEndByChar(String s,char c){
        int i = s.length()-1;
        boolean z = false;
        for(;i>-1;i--){
            if (s.charAt(i)==c){
                z = true;
                break;
            }
        }
        if (!z){
            return "";
        }
        return s.substring(i+1);
    }

    /**
     * 获取元字符开头到指定字符间的字符串
     * @param s
     * @param c
     * @return
     */
    public static String getStartByChar(String s,char c){
        int i = 0;
        boolean z = false;
        for(;i<s.length();i++){
            if (s.charAt(i)==c){
                z = true;
                break;
            }
        }
        if (!z){
            return null;
        }
        return s.substring(0,i);
    }

    /**
     * 获取两个字符之间的字符串
     * @param s
     * @param c1
     * @param c2
     * @return
     */
    public static String getBetweenByChar(String s,char c1,char c2){
        int start = 0,end=0;
        boolean z = false;
        for(int i=0;i<s.length();i++){
            if (s.charAt(i)==c1){
                start = i;
            }
            if (s.charAt(i)==c2){
                end = i;
            }
        }
        return s.substring(start+1,end);
    }

    /**
     * 在字符串两边填充字符（字符串居中）
     * @param s
     * @param c
     * @param length
     * @return
     */
    public static String fillCharToBorder(String s,char c,int length){
        if (s.length()>=length){
            return s;
        }

        int left = (length-s.length())/2;
        int right = length-left-s.length();
        //左边的
        for (int i = 0;i<left;i++){
            s = c + s;
        }
        //右边的
        for (int i=0;i<right;i++){
            s = s + c;
        }
        return s;
    }

    /**
     * 首字母小写转大写
     * @param s
     * @return
     */
    public static String smallCaseMore(String s){
        if (s==null || "".equals(s)){
            return null;
        }
        char c = s.charAt(0);
        if (122<c || c<97){
            System.out.println("转化大小写时首字母不为小写");
            return s;
        }
        char C = (char) (c-32);
        if (s.length()==1){
            return C+"";
        }
        return C+s.substring(1);
    }

    /**
     * 首字母大写转小写
     * @param s
     * @return
     */
    public static String moreCaseSmall(String s){
        if (s==null || "".equals(s)){
            return null;
        }
        char c = s.charAt(0);
        if (90<c || c<65){
            System.out.println("转化大小写时首字母不为大写");
            return s;
        }
        char C = (char) (c+32);
        if (s.length()==1){
            return C+"";
        }
        return C+s.substring(1);
    }

    /**
     * 给字符串判空
     * @param s
     * @return
     */
    public static boolean notEmpty(String s){
        if (s == null){
            return false;
        }
        if ("".equals(s)){
            return false;
        }
        return true;
    }

    /**
     * 拼接字符串
     * @param list
     * @param c
     * @return
     */
    public static String joinByChar(List<String> list,char c){
        String result = "";
        for (int i =0 ;i<list.size();i++){
             result += list.get(0);
             if (i!=list.size()-1){
                 result+=c;
             }
        }
        return result;
    }



    /**
     * 替换参数  使用{} 为占位符模板 里面的参数为map中的key
     *          String s = "{a}hi {name} is {dogName}";
     *         JSONObject jsonObject = new JSONObject();
     *         jsonObject.put("name","赵颖");
     *         jsonObject.put("dogName","儿子");
     *         jsonObject.put("a","儿子er");
     *         输出结果：儿子erhi 赵颖 is 儿子
     * @param template
     * @param params
     * @return
     */
    public static String replaceTemplateString(String template, Map<String,Object> params){
        if (template==null || "".equals(template)){
            return null;
        }
        //结果
        StringBuilder result = new StringBuilder();
        //记录参数开始位置
        Integer ps = null ,pe =0;
        int length = template.length();
        for(int i=0;i<length;i++){
            if (template.charAt(i)=='{'){
                //截取不是占位符的部分
                result.append(template.substring(pe,i));
                ps = i+1;
                continue;
            }
            if (template.charAt(i) == '}' && ps !=null){
                //记录下一次截取不是占位符的部分的位置
                pe = i+1;
                //从map中获取value
                String key = template.substring(ps,i);
                Object o = params.get(key);
                //如果是空则替换成空串
                if (o==null){
                    o = "";
                }
                result.append(o);
                //将占位符开始位置置为空
                ps = null;
                continue;
            }
            //到最后时获取非占位符的字段
            if (i==template.length()-1){
                if (ps != null){
                    throw new RuntimeException("使用replaceTemplateString时模板错误。");
                }
                //添加后面的字符
                result.append(template.substring(pe));
            }
        }
        return result.toString();
    }


}
